package com.ucloud.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ucloud.domain.Employee;
import com.ucloud.service.EmployeeService;
import com.ucloud.utils.Msg;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;

@Controller
public class EmployeeController {

    @Autowired
    EmployeeService employeeService;
    //查询员工数据（分页）
   /* @RequestMapping(value = "/emps",method = RequestMethod.GET)
    public String getEmps(
            @RequestParam(value = "pn",defaultValue = "1")Integer pn
            , Model model){

        //引入PageHelper分页插件
        //在查询前只需要调用 ，传入的页码，以每页大小
        PageHelper.startPage(pn,5);
        //startPage后面紧跟查询，就是第一页五条记录查到list
        List<Employee> emps= employeeService.getAll();
        //使用PageInfo包含查询后结果，包装完只需要PageInfo放到共享对象就可以
        //PageInfo封了详细的分页信息，包含查询出数据，传入页数
        PageInfo page=new PageInfo(emps,5);
        model.addAttribute("pageInfo",page);
        return "list";
    }*/



    ///课从这看----------------------------------------------------
  //查询员工数据（分页）
   @RequestMapping(value = "/emps" ,method = RequestMethod.GET)
   @ResponseBody
   public Msg getEmps(
           @RequestParam(value = "pn",defaultValue = "1")Integer pn){
       //引入pageHelper分页插件
       //在查询时只需调用，传入的页码  每页几条记录
       PageHelper.startPage(pn,5);
       //startpage后面紧跟查询，就是第一页五条记录查询到list
       List<Employee> emps=employeeService.getAll();
       //使用pageInfo拔桩查询后的结果，包装完只需将pageInfo放到共享对象即可
       //pageInfo封装了详细的页面信息，包含查询出数据，传入页数
       PageInfo page=new PageInfo(emps,5);

       return Msg.success().add("pageInfo",page);
   }

    //根据ID进行查询
    @RequestMapping(value = "/emp/{id}",method = RequestMethod.GET)
    @ResponseBody
    public Msg getEmp(@PathVariable("id")Integer id){
        Employee employee=employeeService.getEmp(id);
        return Msg.success().add("emp",employee);
    }

    //验证用户名
    @RequestMapping("/checkuser")
    @ResponseBody
    public Msg checkuser(@RequestParam("empName")String empName){
        //先判断用户名是否合法
        String regx = "(^[a-zA-Z0-9_-]{6,16}$)|(^[\u2E80-\u9FFF]{2,5})";
        if(!empName.matches(regx)){
            return Msg.fail().add("va_msg", "用户名必须是6-16位数字和字母的组合或者2-5位中文");
        }

        //数据库用户名重复校验
        boolean b = employeeService.checkUser(empName);
        if(b){
            return Msg.success();
        }else{
            return Msg.fail().add("va_msg", "用户名不可用");
        }
    }
    //增加(员工保存)
    //1.支持JSR303校验
    @RequestMapping(value = "/emp",method = RequestMethod.POST)
    @ResponseBody
    public Msg saveEmp(Employee employee){
        employeeService.saveEmpl(employee);
        return Msg.success();
    }
    //修改
    /*
    如果直接发送ajax=PUT形式请求
    封装数据到员工employee【empid=10,empname=null....】有问题--employee对象封装不上相关数据
    原因---Tomcat：1.将请求数据封装成一个map
    2.request.getparamentMap()
    Ajax：发送PUT----PUT请求体中的数据request.getparamentMap()拿不到
    Tomcat一般不会封装请求体的数据为map，
    解决：需要支持PUT之类的请求，才能封装请求体当中的数据
    1.配置HTTPPUTFORMCONTEXTFILTER重新包装request.getparamentMap()，
    就会从封装的map取数据
    * */
    @RequestMapping(value = "/emp/{empId}",method = RequestMethod.POST)
    @ResponseBody
    public Msg updateEmp(Employee employee, HttpServletRequest request){
        System.out.println("请求体中的值:"+request.getParameter("gender"));
        System.out.println("跟新前的员工数据:"+employee);
        employeeService.updateEmp(employee);
        return Msg.success();
    }

    //修改数据  难是因为Restful风格 以后开发都是前后端分离 要熟悉这种编码方式
    @RequestMapping(value = "/emp/{empId}",method = RequestMethod.PUT)
    @ResponseBody
    public Msg uodate(Employee employee, HttpServletRequest request){
        System.out.println("  "+request.getParameter("gender"));
        System.out.println("更新前的员工数据"+employee);
        employeeService.updateEmp(employee);
        return Msg.success();
    }

    //删除数据
    //单删和批量删除
    //二合一

    //@DeleteMapping
    @RequestMapping(value = "/emp/{ids}",method = RequestMethod.DELETE)
    @ResponseBody
    public Msg deleteEmp(@PathVariable("ids")String ids){
        //批量删除
        if(ids.contains("-")){
            List<Integer> del_ids=new ArrayList<>();
            String[] str_ids=ids.split("-");
            //组装id集合
            for (String str_id : str_ids) {
                del_ids.add(Integer.parseInt(str_id));
            }
            employeeService.deleteBatch(del_ids);
        }else {
            //单删
        Integer id = Integer.parseInt(ids);
        employeeService.deleteEmp(id);
    }
        return Msg.success();
    }

}
